Редактирование кода
Особенность редактора Hardella IDE заключается в том, что по факту, он не является текстовым редактором. Редактор языка ST похож на текстовый редактор, но по факту он ближе к “заполненю формы с заранее обозначенными ячейками для ввода данных”.
По началу это может показаться странным, но через небольшое время не должно вызывать дискомфорт. Эту особенность видно, например, при указании имени переменной.
Из-за этой же особенности, вставка текстового кода из буфера обмена может не срабатывать. Если код скопирован из Hardella, то всё должно работать. А скопировать код из браузера и вставить в редактор сейчас не получится (это планируется поправить в будущем).
Создание функциональных блоков
Для создания FB нужно нажать правой кнопкой в Logical View (левая часть экрана), и выбрать New > c.g.v.iec61131.types > FB.

Альтернативный вариант – ctrl+c / ctrl+v для какого-нибудь имеющегося блока.
Так будет выглядеть новый блок после создания:

Здесь видно, что “каркас” всегда одинаков (слова FUNCTION_BLOCK, variables, body), а для конкретных значений оставлено “место ввода данных”.
Название блока является обязательным, поэтому оно выделено красным. Список переменных и тело блока опциональны, поэтому они красным не подсвечены.
Сделаем блок для OR. Смысла в нём немного (ведь можно использовать операцию a OR b), но для примера вполне подойдёт.
Записываем название:
 
Далее нужно объявить переменные. Для этого можно нажать tab и курсор переместится в область объявления переменных. Можно использовать стрелки, мышку и т.п. (кому что удобнее).
Объявление переменных
Для добавления элемента в список следует использовать enter. Т.е. нажимаем enter и Hardella создаёт “рыбу” для объявления переменной.

Следует учитывать, что имя указывается отдельно, тип отдельно. Двоеточие посредине уже указано и с ним ничего делать не нужно.
Пишем x (имя переменной), нажимаем tab (или стрелку вправо) для перехода к выбору типа переменной.

Нужно как-то указать BOOL тип. Один вариант это взять и написать BOOL (большими буквами).
Более интересный – и спользованием автодополнения.
Можно написать часть идентификатора, а можно вообще ничего не писать и нажать ctrl+пробел.

BOOL находится на втором месте, его можно выбрать стрелочками и нажать enter.
Такой подход помогает когда точное называние блока забыто.
Хорошо, получили x : BOOL, но как обозначить, что это будет входная переменная?
Флаги input, output
Для указания input, output флагов, нужно разместить курсор слева от названия переменной (т.е. слева от x), нажать пробел и воспользоваться одним из следующих вариантов:
- напечатать 
input(илиoutput) - нажать 
ctrl+пробели выбрать нужный вариант в меню:
 
Дублирование строк, блоков кода
Одной входной переменной явно мало, но можно её размножить клавишей ctrl+d (от слова duplicate).
Нажимаем несколько раз и получаем такую картину:
  
Вторая и третья переменные подкрашены красным, т.к. нехорошо когда несколько переменных имеют одинаковое название.
Редактируем имена, и меняем тип последней переменной с input на output. Для этого стираем input и добавляем output.
Среда автоматически добавляет пустые строки между разнотипными группами переменных, поэтому в итоге код будет выглядеть так:

Введение выражений
Переходим к телу ФБ, нажимаем ctrl+пробел, выбираем StatementList.
После этого можно писать код на языке ST.
Для того, чтобы получить z := x OR y;, нужно нажимать следующие клавиши:
z– появитсяz;:=– появитсяz := ___;x– появитсяz := x;пробел. Если послеxне нажать пробел, то вместоx ORсреда подумает, что мы имеем ввиду переменную с именемxOROR. В итоге будетz := x OR ___;- ‘y’
 
Можно было зайти и с другого конца:
:– появится___ := ___;Дело в том, что присваивание это единственная операция с двоеточием, поэтому сразу после довоеточия среда и понимает, что нужна операция присваиванияz– появитсяz := ___;tabдля перехода в правую частьOR, нажатьctrl+пробел, и выбрать в менюor expression– появитсяz := ___ OR ___;- Далее заполнить левый и правый аргументы операции 
ORнужными переменными 
Копирование и вставка
ctrl+c / ctrl+v работает.
Следует понимать, что среда следит за типами и смыслом выражения.
Например, не получится скопировать в буфер конструкцию IF ... END_IF и вставить её на место объявления переменной (смысла, конечно, в такой операции немного, но стоит понимать, что и в других местах будет подобное поведение).
С другой стороны, скопировать объявление переменной и вставить рядом с другим объявлением – можно, в том числе и в другом блоке.
Большинство сложных конструкций копируются только целиком. Например, невозможно скопировать IF без закрывающего END_IF или без части ELSIF веток. Если реально нужно, то нужно скопировать целиком, а потом удалить лишнее.
Переименование переменных, блоков
Для переименования переменных и блоков достаточно просто перейти к объявлению переменной и переименовать. При этом, все использования переменной будут автоматически исправлены.
Перемещение строк, блоков вверх-вниз
Очень часто приходится тасовать строки, параметры и целые фрагменты кода (например, внести операцию внутрь IF или, наоборот, вынести из ветки).
Для этого есть горячие клавиши: ctrl+shift+↑ и ctrl+shift+↓
Комментировать